home *** CD-ROM | disk | FTP | other *** search
/ FM Towns: Free Software Collection 11 / FM Towns Free Software Collection 11.iso / t_os / tool / zc / src / tgtob.c < prev    next >
Text File  |  1995-06-30  |  16KB  |  399 lines

  1. #include <stdio.h>
  2. #include <egb.h>
  3. #include "stdlib.h"
  4. #include <msdos.cf>
  5. #include "FMCFRB.H"
  6.  
  7. #define     GBUF_SIZE16    (321 * 241 * 2)
  8. #define     GBUF_SIZE8    (640 * 480 * 1)
  9.  
  10. #define  BITR(p1)    ( (p1 & 0x03e0) >>  5 )
  11. #define  BITG(p1)    ( (p1 & 0x7c00) >> 10 )
  12. #define  BITB(p1)    (  p1 & 0x1f )
  13.  
  14. typedef    struct {
  15.     char *ptr ;
  16.     short ds ;
  17.     short sx,sy,ex,ey ;
  18.     unsigned short dx,dy ;
  19. }EGBPARM ;
  20.  
  21. extern char gwork[];    /* T-BIOS EGB ワーク */
  22. extern char palt[] ;    /* パレット */
  23. extern int mode;    /* 1=2色 4=16色 8=256色 16=32k色 */
  24. extern int ovr;        /* 重ね合わせ濃度    */
  25. extern int aflg;    /* 加算フラグ    */
  26. extern int sx,sy;    /* ズ-ム大きさ    */
  27. extern int ix,iy;    /* 読み込み位置    */
  28.  
  29. /***********************************************************
  30.     GVRAM -> 重ね合わせ用バッファ(32k色モ-ド)
  31. *************************************************************/
  32. int    GvramToBuf( short int *kbuf )
  33. {
  34. trace("Gvram To Buf called ");
  35.     switch( mode ){
  36.     case 2:    /* 2色 */
  37.     case 4: /* 16色 */
  38.         break;
  39.     case 8: /* 256色 */
  40.         GvramToBuf8( kbuf );
  41.         break;
  42.     case 16: /* 32k色 */
  43.         GvramToBuf16( kbuf );
  44.         break;
  45.     }
  46.  
  47. trace("Gvram To Buf return ");
  48.     return;
  49. }
  50.  
  51. int    GvramToBuf16( short int *kbuf )
  52. {
  53.     int bx,by;
  54.  
  55.     short int *gbuf;        /* EGB_get用バッファ */
  56.     EGBPARM   egb_p ;
  57.     unsigned int r,g,b;
  58.     unsigned int vbeta, bbeta;
  59.     unsigned int xflg, yflg;
  60.  
  61.     gbuf = (short int*)malloc( GBUF_SIZE16 );
  62.     if( gbuf == NULL ){
  63.         trace("Fail to malloc gbuf");
  64.         exit( -1 );
  65.     }
  66.     egb_p.ptr = (char *)gbuf;
  67.     egb_p.ds  = getds() ;
  68.     egb_p.sx  = 0+96+sx;
  69.     egb_p.sy  = 0+136+sy;
  70.     egb_p.ex  = 320+96-sx;
  71.     egb_p.ey  = 240+136-sy;
  72.     egb_p.dx  = 321;
  73.     egb_p.dy  = 241;
  74.     EGB_getBlockZoom( gwork, (char *)&egb_p ) ;
  75.  
  76.     xflg = (ix%2 != 0);    /* 2で割り切れなければ1    */
  77.     yflg = (iy%2 != 0);    /* 2で割り切れなければ1    */
  78.  
  79.     if (aflg != 0){
  80.         for( by=yflg; by < 480-yflg; by += 2){
  81.             for( bx=xflg; bx < 640-xflg; bx += 2){
  82.                 vbeta = *(gbuf + bx/2 + by/2 * 321);
  83.                 vbeta = vbeta & 0x7fff; /* ス-パ-インポ-ズbit off */
  84.                 if( vbeta != 0 ){    /* 黒以外なら書き込み */
  85.                     bbeta  = *(kbuf + bx + by*640);
  86.                     r = _min( (BITR(bbeta)*256 + BITR(vbeta) * ovr), 31*256 )/256;
  87.                     g = _min( (BITG(bbeta)*256 + BITG(vbeta) * ovr), 31*256 )/256;
  88.                     b = _min( (BITB(bbeta)*256 + BITB(vbeta) * ovr), 31*256 )/256;
  89.                     *(kbuf + bx + by*640) = ( ((r << 5)&0x3e0) | ((g << 10)&0x7c00) | (b&0x1f));
  90.  
  91.                     bbeta  = *(kbuf + bx+1 + by*640);
  92.                     r = _min( (BITR(bbeta)*256 + BITR(vbeta) * ovr), 31*256 )/256;
  93.                     g = _min( (BITG(bbeta)*256 + BITG(vbeta) * ovr), 31*256 )/256;
  94.                     b = _min( (BITB(bbeta)*256 + BITB(vbeta) * ovr), 31*256 )/256;
  95.                     *(kbuf + bx+1 + by*640) = ( ((r << 5)&0x3e0) | ((g << 10)&0x7c00) | (b&0x1f));
  96.  
  97.                     bbeta  = *(kbuf + bx   + (by+1)*640);
  98.                     r = _min( (BITR(bbeta)*256 + BITR(vbeta) * ovr), 31*256 )/256;
  99.                     g = _min( (BITG(bbeta)*256 + BITG(vbeta) * ovr), 31*256 )/256;
  100.                     b = _min( (BITB(bbeta)*256 + BITB(vbeta) * ovr), 31*256 )/256;
  101.                     *(kbuf + bx   + (by+1)*640) = ( ((r << 5)&0x3e0) | ((g << 10)&0x7c00) | (b&0x1f));
  102.  
  103.                     bbeta  = *(kbuf + bx+1   + (by+1)*640);
  104.                     r = _min( (BITR(bbeta)*256 + BITR(vbeta) * ovr), 31*256 )/256;
  105.                     g = _min( (BITG(bbeta)*256 + BITG(vbeta) * ovr), 31*256 )/256;
  106.                     b = _min( (BITB(bbeta)*256 + BITB(vbeta) * ovr), 31*256 )/256;
  107.                     *(kbuf + bx+1 + (by+1)*640) = ( ((r << 5)&0x3e0) | ((g << 10)&0x7c00) | (b&0x1f));
  108.                 }
  109.             }
  110.             if(xflg){    /* X方向へ0.5Dot 移動有り    */
  111.                 vbeta = *(gbuf + (by+1)/2 * 321);    /* 右端    */
  112.                 vbeta = vbeta & 0x7fff; /* ス-パ-インポ-ズbit off */
  113.                 if( vbeta != 0 ){    /* 黒以外なら書き込み */
  114.                     bbeta  = *(kbuf + by*640);
  115.                     r = _min( (BITR(bbeta)*256 + BITR(vbeta) * ovr), 31*256 )/256;
  116.                     g = _min( (BITG(bbeta)*256 + BITG(vbeta) * ovr), 31*256 )/256;
  117.                     b = _min( (BITB(bbeta)*256 + BITB(vbeta) * ovr), 31*256 )/256;
  118.                     *(kbuf +  by    * 640) = 
  119.                     *(kbuf + (by+1) * 640) = ( ((r << 5)&0x3e0) | ((g << 10)&0x7c00) | (b&0x1f));
  120.  
  121.                     bbeta  = *(kbuf +  319 + by*640);/* 左端    */
  122.                     r = _min( (BITR(bbeta)*256 + BITR(vbeta) * ovr), 31*256 )/256;
  123.                     g = _min( (BITG(bbeta)*256 + BITG(vbeta) * ovr), 31*256 )/256;
  124.                     b = _min( (BITB(bbeta)*256 + BITB(vbeta) * ovr), 31*256 )/256;
  125.                     *(kbuf + 639 + by    * 640) = 
  126.                     *(kbuf + 639 +(by+1) * 640) = ( ((r << 5)&0x3e0) | ((g << 10)&0x7c00) | (b&0x1f));
  127.                 }
  128.             }
  129.         }
  130.         if(yflg){    /* Y方向へ0.5Dot 移動有り    */
  131.             for( bx=xflg; bx < 640-xflg; bx += 2){
  132.                 vbeta = *(gbuf + (bx+1)/2);
  133.                 vbeta = vbeta & 0x7fff;    /* ス-パ-インポ-ズbit off */
  134.                 if( vbeta != 0 ){    /* 黒以外なら書き込み */
  135.                     bbeta  = *(kbuf + bx);
  136.                     r = _min( (BITR(bbeta)*256 + BITR(vbeta) * ovr), 31*256 )/256;
  137.                     g = _min( (BITG(bbeta)*256 + BITG(vbeta) * ovr), 31*256 )/256;
  138.                     b = _min( (BITB(bbeta)*256 + BITB(vbeta) * ovr), 31*256 )/256;
  139.                     *(kbuf + bx)     = ( ((r << 5)&0x3e0) | ((g << 10)&0x7c00) | (b&0x1f));
  140.  
  141.                     bbeta  = *(kbuf + bx + 1);
  142.                     r = _min( (BITR(bbeta)*256 + BITR(vbeta) * ovr), 31*256 )/256;
  143.                     g = _min( (BITG(bbeta)*256 + BITG(vbeta) * ovr), 31*256 )/256;
  144.                     b = _min( (BITB(bbeta)*256 + BITB(vbeta) * ovr), 31*256 )/256;
  145.                     *(kbuf + bx + 1) = ( ((r << 5)&0x3e0) | ((g << 10)&0x7c00) | (b&0x1f));
  146.                 }
  147.  
  148.                 vbeta = *(gbuf + (bx+1)/2 + 641/2 * 321);
  149.                 vbeta = vbeta & 0x7fff;    /* ス-パ-インポ-ズbit off */
  150.                 if( vbeta != 0 ){    /* 黒以外なら書き込み */
  151.                     bbeta  = *(kbuf + bx + 479*640);
  152.                     r = _min( (BITR(bbeta)*256 + BITR(vbeta) * ovr), 31*256 )/256;
  153.                     g = _min( (BITG(bbeta)*256 + BITG(vbeta) * ovr), 31*256 )/256;
  154.                     b = _min( (BITB(bbeta)*256 + BITB(vbeta) * ovr), 31*256 )/256;
  155.                     *(kbuf + bx   + 479*640) = ( ((r << 5)&0x3e0) | ((g << 10)&0x7c00) | (b&0x1f));
  156.  
  157.                     bbeta  = *(kbuf + bx+1 + 479*640);
  158.                     r = _min( (BITR(bbeta)*256 + BITR(vbeta) * ovr), 31*256 )/256;
  159.                     g = _min( (BITG(bbeta)*256 + BITG(vbeta) * ovr), 31*256 )/256;
  160.                     b = _min( (BITB(bbeta)*256 + BITB(vbeta) * ovr), 31*256 )/256;
  161.                     *(kbuf + bx+1 + 479*640) = ( ((r << 5)&0x3e0) | ((g << 10)&0x7c00) | (b&0x1f));
  162.                 }
  163.             }
  164.         }
  165.     }else{
  166.     if (ovr == 256 ){
  167.         for( by=yflg; by < 480-yflg; by += 2){
  168.             for( bx=xflg; bx < 640-xflg; bx += 2){
  169.                 vbeta = *(gbuf + (bx+1)/2 + (by+1)/2 * 321);
  170.                 vbeta = vbeta & 0x7fff;    /* ス-パ-インポ-ズbit off */
  171.                 if( vbeta != 0 ){    /* 黒以外なら書き込み */
  172.                     *(kbuf + bx   + by*640)     = 
  173.                     *(kbuf + bx+1 + by*640)     = 
  174.                     *(kbuf + bx   + (by+1)*640) = 
  175.                     *(kbuf + bx+1 + (by+1)*640) = vbeta;
  176.                 }
  177.             }
  178.             if(xflg){    /* X方向へ0.5Dot 移動有り    */
  179.                 vbeta = *(gbuf + (by+1)/2 * 321);    /* 左端の処理    */
  180.                 vbeta = vbeta & 0x7fff;    /* ス-パ-インポ-ズbit off */
  181.                 if( vbeta != 0 ){    /* 黒以外なら書き込み */
  182.                     *(kbuf + by*640)     = 
  183.                     *(kbuf + (by+1)*640) = vbeta;
  184.                 }
  185.                 vbeta = *(gbuf + 319 + (by+1)/2 * 321);/* 右端    */
  186.                 vbeta = vbeta & 0x7fff;    /* ス-パ-インポ-ズbit off */
  187.                 if( vbeta != 0 ){    /* 黒以外なら書き込み */
  188.                     *(kbuf + 639 + by*640)     = 
  189.                     *(kbuf + 639 + (by+1)*640) = vbeta;
  190.                 }
  191.             }
  192.         }
  193.         if(yflg){    /* Y方向へ0.5Dot 移動有り    */
  194.             for( bx=xflg; bx < 640-xflg; bx += 2){
  195.                 vbeta = *(gbuf + (bx+1)/2);
  196.                 vbeta = vbeta & 0x7fff;    /* ス-パ-インポ-ズbit off */
  197.                 if( vbeta != 0 ){    /* 黒以外なら書き込み */
  198.                     *(kbuf + bx   )     = 
  199.                     *(kbuf + bx+1 )     = vbeta;
  200.                 }
  201.                 vbeta = *(gbuf + (bx+1)/2 + (by+1)/2 * 321);
  202.                 vbeta = vbeta & 0x7fff;    /* ス-パ-インポ-ズbit off */
  203.                 if( vbeta != 0 ){    /* 黒以外なら書き込み */
  204.                     *(kbuf + bx   + 479*640)     = 
  205.                     *(kbuf + bx+1 + 479*640)     = vbeta;
  206.                 }
  207.             }
  208.         }
  209.     }else{
  210.         for( by=yflg; by < 480-yflg; by += 2){
  211.             for( bx=xflg; bx < 640-xflg; bx += 2){
  212.                 vbeta = *(gbuf + bx/2 + by/2 * 321);
  213.                 vbeta = vbeta & 0x7fff; /* ス-パ-インポ-ズbit off */
  214.                 if( vbeta != 0 ){    /* 黒以外なら書き込み */
  215.                     bbeta  = *(kbuf + bx + by*640);
  216.                     r = _min( ((BITR(vbeta) - BITR(bbeta) ) * ovr + BITR(bbeta)*256), 31*256 )/256;
  217.                     g = _min( ((BITG(vbeta) - BITG(bbeta) ) * ovr + BITG(bbeta)*256), 31*256 )/256;
  218.                     b = _min( ((BITB(vbeta) - BITB(bbeta) ) * ovr + BITB(bbeta)*256), 31*256 )/256;
  219.                     *(kbuf + bx + by*640) = ( ((r << 5)&0x3e0) | ((g << 10)&0x7c00) | (b&0x1f));
  220.  
  221.                     bbeta  = *(kbuf + bx+1 + by*640);
  222.                     r = _min( ((BITR(vbeta) - BITR(bbeta) ) * ovr + BITR(bbeta)*256), 31*256 )/256;
  223.                     g = _min( ((BITG(vbeta) - BITG(bbeta) ) * ovr + BITG(bbeta)*256), 31*256 )/256;
  224.                     b = _min( ((BITB(vbeta) - BITB(bbeta) ) * ovr + BITB(bbeta)*256), 31*256 )/256;
  225.                     *(kbuf + bx+1 + by*640) = ( ((r << 5)&0x3e0) | ((g << 10)&0x7c00) | (b&0x1f));
  226.  
  227.                     bbeta  = *(kbuf + bx   + (by+1)*640);
  228.                     r = _min( ((BITR(vbeta) - BITR(bbeta) ) * ovr + BITR(bbeta)*256), 31*256 )/256;
  229.                     g = _min( ((BITG(vbeta) - BITG(bbeta) ) * ovr + BITG(bbeta)*256), 31*256 )/256;
  230.                     b = _min( ((BITB(vbeta) - BITB(bbeta) ) * ovr + BITB(bbeta)*256), 31*256 )/256;
  231.                     *(kbuf + bx   + (by+1)*640) = ( ((r << 5)&0x3e0) | ((g << 10)&0x7c00) | (b&0x1f));
  232.  
  233.                     bbeta  = *(kbuf + bx+1   + (by+1)*640);
  234.                     r = _min( ((BITR(vbeta) - BITR(bbeta) ) * ovr + BITR(bbeta)*256), 31*256 )/256;
  235.                     g = _min( ((BITG(vbeta) - BITG(bbeta) ) * ovr + BITG(bbeta)*256), 31*256 )/256;
  236.                     b = _min( ((BITB(vbeta) - BITB(bbeta) ) * ovr + BITB(bbeta)*256), 31*256 )/256;
  237.                     *(kbuf + bx+1 + (by+1)*640) = ( ((r << 5)&0x3e0) | ((g << 10)&0x7c00) | (b&0x1f));
  238.                 }
  239.             }
  240.             if(xflg){    /* X方向へ0.5Dot 移動有り    */
  241.                 vbeta = *(gbuf + (by+1)/2 * 321);    /* 右端    */
  242.                 vbeta = vbeta & 0x7fff; /* ス-パ-インポ-ズbit off */
  243.                 if( vbeta != 0 ){    /* 黒以外なら書き込み */
  244.                     bbeta  = *(kbuf + by*640);
  245.                     r = _min( ((BITR(vbeta) - BITR(bbeta) ) * ovr + BITR(bbeta)*256), 31*256 )/256;
  246.                     g = _min( ((BITG(vbeta) - BITG(bbeta) ) * ovr + BITG(bbeta)*256), 31*256 )/256;
  247.                     b = _min( ((BITB(vbeta) - BITB(bbeta) ) * ovr + BITB(bbeta)*256), 31*256 )/256;
  248.                     *(kbuf +  by    * 640) = 
  249.                     *(kbuf + (by+1) * 640) = ( ((r << 5)&0x3e0) | ((g << 10)&0x7c00) | (b&0x1f));
  250.  
  251.                     bbeta  = *(kbuf +  319 + by*640);/* 左端    */
  252.                     r = _min( ((BITR(vbeta) - BITR(bbeta) ) * ovr + BITR(bbeta)*256), 31*256 )/256;
  253.                     g = _min( ((BITG(vbeta) - BITG(bbeta) ) * ovr + BITG(bbeta)*256), 31*256 )/256;
  254.                     b = _min( ((BITB(vbeta) - BITB(bbeta) ) * ovr + BITB(bbeta)*256), 31*256 )/256;
  255.                     *(kbuf + 639 + by    * 640) = 
  256.                     *(kbuf + 639 +(by+1) * 640) = ( ((r << 5)&0x3e0) | ((g << 10)&0x7c00) | (b&0x1f));
  257.                 }
  258.             }
  259.         }
  260.         if(yflg){    /* Y方向へ0.5Dot 移動有り    */
  261.             for( bx=xflg; bx < 640-xflg; bx += 2){
  262.                 vbeta = *(gbuf + (bx+1)/2);
  263.                 vbeta = vbeta & 0x7fff;    /* ス-パ-インポ-ズbit off */
  264.                 if( vbeta != 0 ){    /* 黒以外なら書き込み */
  265.                     bbeta  = *(kbuf + bx);
  266.                     r = _min( ((BITR(vbeta) - BITR(bbeta) ) * ovr + BITR(bbeta)*256), 31*256 )/256;
  267.                     g = _min( ((BITG(vbeta) - BITG(bbeta) ) * ovr + BITG(bbeta)*256), 31*256 )/256;
  268.                     b = _min( ((BITB(vbeta) - BITB(bbeta) ) * ovr + BITB(bbeta)*256), 31*256 )/256;
  269.                     *(kbuf + bx)     = ( ((r << 5)&0x3e0) | ((g << 10)&0x7c00) | (b&0x1f));
  270.  
  271.                     bbeta  = *(kbuf + bx + 1);
  272.                     r = _min( ((BITR(vbeta) - BITR(bbeta) ) * ovr + BITR(bbeta)*256), 31*256 )/256;
  273.                     g = _min( ((BITG(vbeta) - BITG(bbeta) ) * ovr + BITG(bbeta)*256), 31*256 )/256;
  274.                     b = _min( ((BITB(vbeta) - BITB(bbeta) ) * ovr + BITB(bbeta)*256), 31*256 )/256;
  275.                     *(kbuf + bx + 1) = ( ((r << 5)&0x3e0) | ((g << 10)&0x7c00) | (b&0x1f));
  276.                 }
  277.  
  278.                 vbeta = *(gbuf + (bx+1)/2 + 641/2 * 321);
  279.                 vbeta = vbeta & 0x7fff;    /* ス-パ-インポ-ズbit off */
  280.                 if( vbeta != 0 ){    /* 黒以外なら書き込み */
  281.                     bbeta  = *(kbuf + bx + 479*640);
  282.                     r = _min( ((BITR(vbeta) - BITR(bbeta) ) * ovr + BITR(bbeta)*256), 31*256 )/256;
  283.                     g = _min( ((BITG(vbeta) - BITG(bbeta) ) * ovr + BITG(bbeta)*256), 31*256 )/256;
  284.                     b = _min( ((BITB(vbeta) - BITB(bbeta) ) * ovr + BITB(bbeta)*256), 31*256 )/256;
  285.                     *(kbuf + bx   + 479*640) = ( ((r << 5)&0x3e0) | ((g << 10)&0x7c00) | (b&0x1f));
  286.  
  287.                     bbeta  = *(kbuf + bx+1 + 479*640);
  288.                     r = _min( ((BITR(vbeta) - BITR(bbeta) ) * ovr + BITR(bbeta)*256), 31*256 )/256;
  289.                     g = _min( ((BITG(vbeta) - BITG(bbeta) ) * ovr + BITG(bbeta)*256), 31*256 )/256;
  290.                     b = _min( ((BITB(vbeta) - BITB(bbeta) ) * ovr + BITB(bbeta)*256), 31*256 )/256;
  291.                     *(kbuf + bx+1 + 479*640) = ( ((r << 5)&0x3e0) | ((g << 10)&0x7c00) | (b&0x1f));
  292.                 }
  293.             }
  294.         }
  295.     }
  296.     }
  297.     free( gbuf );
  298.     return 0;
  299. }
  300.  
  301. /***********************************************************
  302.     GVRAM -> 重ね合わせ用バッファ(256色モ-ド)
  303. *************************************************************/
  304. int    GvramToBuf8( short int *kbuf )
  305. {
  306.     int    i;
  307.     int bx,by;
  308.     char     *gbuf;        /* EGB_get用バッファ */
  309.     EGBPARM   egb_p ;
  310.     unsigned int r,g,b;
  311.     unsigned int vbeta, bbeta;
  312.  
  313.     short int paltbl[256];    /* 32K色パレットテ-ブル*/
  314.     unsigned int p_no;    /* パレット設定数    */
  315.     unsigned int p_color;    /* パレット番号        */
  316.     char    *p_ptr;        /* パレットのポインタ    */
  317.  
  318.     /**********************************************************
  319.             パレット表作成
  320.     **********************************************************/
  321.     _fill_char( paltbl, sizeof(paltbl), 0xffffffff ); /* 透明色で初期化 */
  322.  
  323.     p_ptr = palt;
  324.     p_no = DWORD( p_ptr+0 );    /* 設定されているパレット数    */
  325.     p_ptr += 4;
  326.     for( i=0; i<p_no; i++){
  327.         p_color = DWORD( p_ptr );
  328.         b = BYTE( p_ptr + 4 );
  329.         r = BYTE( p_ptr + 5 );
  330.         g = BYTE( p_ptr + 6 );
  331.         p_ptr += 8;
  332.  
  333.         if( (b==0) && (r==0) && (g==0) ){
  334.             continue;    /* 透明 */
  335.         }
  336.         paltbl[p_color] = ( ((g<<7)&0x7c00) + ((r<<2)&0x03e0) + ((b>>3)&0x001f) );
  337.     }
  338.  
  339.     /**********************************************************
  340.             画面GET    VRAM -> kbuf
  341.     **********************************************************/
  342.     gbuf = malloc( GBUF_SIZE8 );
  343.     if( gbuf == NULL ){
  344.         trace("Fail to malloc gbuf");
  345.         exit( -1 );
  346.     }
  347.     egb_p.ptr = gbuf;
  348.     egb_p.ds  = getds() ;
  349.     egb_p.sx  = 0+192  +sx;
  350.     egb_p.sy  = 0+32   +sy;
  351.     egb_p.ex  = 639+192-sx;
  352.     egb_p.ey  = 479+32 -sy;
  353.     egb_p.dx  = 640;
  354.     egb_p.dy  = 480;
  355.     EGB_getBlockZoom( gwork, (char *)&egb_p ) ;
  356.  
  357.     if (aflg != 0){    /* 加算合成    */
  358.         for( by=0; by < 480; by ++){
  359.             for( bx=0; bx < 640; bx ++){
  360.                 vbeta = paltbl[*(gbuf + bx + by * 640)];
  361.                 if( vbeta != 0xffffffff ){    /* 透明色以外なら書き込み */
  362.                     bbeta = *(kbuf + bx + by*640);
  363.                     r = _min( (BITR(bbeta)*256 + BITR(vbeta) * ovr), 31*256 )/256;
  364.                     g = _min( (BITG(bbeta)*256 + BITG(vbeta) * ovr), 31*256 )/256;
  365.                     b = _min( (BITB(bbeta)*256 + BITB(vbeta) * ovr), 31*256 )/256;
  366.                     *(kbuf + bx + by*640) = ( ((r << 5)&0x3e0) | ((g << 10)&0x7c00) | (b&0x1f));
  367.                 }
  368.             }
  369.         }
  370.     }else{
  371.     if (ovr == 256 ){
  372.         for( by=0; by < 480; by ++){
  373.             for( bx=0; bx < 640; bx ++){
  374.                 vbeta = paltbl[*(gbuf + bx + by * 640)];
  375.                 if( vbeta != 0xffffffff ){
  376.                     /* 透明色以外なら書き込み */
  377.                     *(kbuf + bx   + by*640)     = vbeta;
  378.                 }
  379.             }
  380.         }
  381.     }else{
  382.         for( by=0; by < 480; by ++){
  383.             for( bx=0; bx < 640; bx ++){
  384.                 vbeta = paltbl[*(gbuf + bx + by * 640)];
  385.                 if( vbeta != 0xffffffff ){    /* 透明色以外なら書き込み */
  386.                     bbeta  = *(kbuf + bx + by*640);
  387.                     r = _min( ((BITR(vbeta) - BITR(bbeta) ) * ovr + BITR(bbeta)*256), 31*256 )/256;
  388.                     g = _min( ((BITG(vbeta) - BITG(bbeta) ) * ovr + BITG(bbeta)*256), 31*256 )/256;
  389.                     b = _min( ((BITB(vbeta) - BITB(bbeta) ) * ovr + BITB(bbeta)*256), 31*256 )/256;
  390.                     *(kbuf + bx + by*640) = ( ((r << 5)&0x3e0) | ((g << 10)&0x7c00) | (b&0x1f));
  391.                 }
  392.             }
  393.         }
  394.     }
  395.     }
  396.     free( gbuf );
  397.     return 0;
  398. }
  399.